/**
    除了可见性修饰符外,还有一个常见修饰符是: readonly(只读修饰符)
    readonly: 表示只读,用来防止在构造函数外对属性进行赋值

        1.使用 readonly 关键字修饰该属性是只读的,注意不能修饰方法
        2.属性 age 后面的类型注解(:number)如果不加,则age的类型为18(字面量类型)
        3.接口或者{}表示的对象类型,也可以用readonly
 */


class Person {
    // readonly age = 18 //字面量类型
    //只要是readonly修饰的属性,必须手动提供明确的类型
    readonly age: number = 18 //默认值
    constructor(age:number) {
        this.age = age
    }
    //不能修饰方法
    // readonly setAge () {
    //     // this.age = 20 //无法修改
    // }
}

let p = new Person(20) //默认值是18,加了变成20
// p.age = 33 //无法修改


interface IPerson {
    readonly name: string
}

let obj2: IPerson = {
    name: 'tom'
}
// obj.name = 'cat' // 无法修改




let obj: {readonly name:string} = {
    name: 'tom'
}






